str1 = 'hello chuanzhi!!!!'

# find()
# find(self, sub, __start, __end)
# self : 先不用理会,这个不需要我们传值.
# sub : 我们要查找的字符或字符串
# __start : 查找的起始位置索引
# __end : 查找的结束位置索引

# 需求: 要查找当前字符串中c的下标值是什么
index = str1.find('c', 0, 100)
print(index)  # 6
print(type(index))  # <class 'int'>

print(str1[6])  # c

print('--------------------------')
# 需求: 要查找当前字符串中chuanzhi的下标是什么
index = str1.find('chuanzhi', 0, 100)
print(index)  # 6
# 注意: 如果查找的是字符串,则返回该字符串首字母在目标字符串中的索引值.

# 起始位置和终止位置可以省略,省略后默认获取从整个字符串中查找
index = str1.find('chuanzhi')
print(index)  # 6

# 如果我们指定字符串查找范围,该范围是左闭右开区间
index = str1.find('chuanzhi', 7, 100)
# -1 代表该字符串中没有要查找的子字符串, 如果被查找字符串不存在不会报错
print(index)  # -1

# 注意: 如果我们想要使用查找到的索引值,获取数据内容,要注意一定要判断该值是否为-1,因为-1也有值
# 例如: 我们获取下标为6,则可以通过6获取到我们查找的字符c,如果获取的下标为-1,应该没有该字符串,但是我们也可以获取一个值.

print('--------------------------')
# 需求: 查找字符串中h出现的位置索引
# find 是查找从左至右第一个出现的指定字符串的索引位置.
index = str1.find('h')
print(index)  # 0

print('-----------index------------')

str1 = 'hello chuanzhi!!!!'

# index()
# index(self, sub, __start, __end)
# self : 先不用理会,这个不需要我们传值.
# sub : 我们要查找的字符或字符串
# __start : 查找的起始位置索引
# __end : 查找的结束位置索引

# 需求: 要查找当前字符串中c的下标值是什么
print(str1.index('c'))  # 6

# 需求: 要查找当前字符串中chuanzhi的下标是什么
print(str1.index('chuanzhi'))  # 6

# 如果我们指定字符串查找范围,该范围是左闭右开区间
# ValueError: substring not found  如果使用index 子字符串在目标字符串中未出现则报错
# print(str1.index('chuanzhi', 7, 100))

# 需求: 查找字符串中h出现的位置索引
# index 是查找从左至右第一个出现的指定字符串的索引位置.
print(str1.index('h'))  # 0

# 总结:
# 1. index 和 find 都是进行子字符串在目标字符串中从左至右第一次出现的位置索引查询
# 2. index 和 find 都可以进行查找范围的指定,查找范围依然是左闭右开区间
# 3. index 中如果被查找的字符串不存在,则报错
# 4. find 中如果被查找的字符串不存在,则返回-1
# 5. 当我们查找的是多个字符的子字符串时,只返回第一个字母的位置

print('--------------------------')
# 练习:
str1 = 'hello Python and BigData!!!!'
# 查询str1中所有的a出现的位置并打印
# 思路: 每次查询到字符位置后,修改字符串查找范围, 让起始位置为上次结果位置+1
start_index = 0
while True:
    # 指定查询范围
    index = str1.find('a', start_index)
    if index != -1:
        # 当查到数据之后,将查询的起始位置设置为当前查询结果+1
        print(index)
        start_index = index + 1
    else:
        print('字符串已经查询完成')
        break
